package controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.Vacina;
import dao.VacinaDAO;

public class VacinaController extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}

	private void doProcess(HttpServletRequest request,
			HttpServletResponse response) {
		//verifica qual acao deve executar
		if (request.getParameter("action") != null) {
			
			if (request.getParameter("action").toLowerCase().equals("alterar")) {
				//altera uma vacina existente
				alterarCalendarioVacinacao(request, response);
			} else {
				if (request.getParameter("action").toLowerCase().equals("salvar")) {
					//cadastra uma vacina nova
					cadastrarCalendarioVacinacao(request);
				}
				if (request.getParameter("action").toLowerCase().equals("excluir")) {
					//remove uma vacina existente
					excluirCalendarioVacinacao(request);
				}
				//lista criancas com vacinas em atraso
				listarVacinasEmAtraso(request, response);
			}

		} else {
			//lista criancas com vacinas em atraso
			listarVacinasEmAtraso(request, response);
		}
	}

	@Override
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}

	private void cadastrarCalendarioVacinacao(HttpServletRequest request) {
		//extrai os parametros do request e cria um objeto vacina
		Vacina vacina = new Vacina();
		if (request.getParameter("codigo") != null
				&& !request.getParameter("codigo").equals("")) {
			vacina.setCodigo(Integer.parseInt(request.getParameter("codigo")));
		}

		vacina.setNome(request.getParameter("nome"));
		vacina.setIdadeVacinacao(Integer.parseInt(request.getParameter("idade")));
		//utiliza o DAO para persistir o objeto vacina no banco de dados
		new VacinaDAO().save(vacina);
	}

	private void alterarCalendarioVacinacao(HttpServletRequest request, HttpServletResponse response) {
		//extrai o parametro do request e busca os dados completos da vacina na base de dados 
		Vacina vacina = new VacinaDAO().find(Integer.parseInt(request.getParameter("codigo")));
		//seta a vacina nos parametros do request
		request.setAttribute("vacina", vacina);
		try {
			//direciona para a pagina de cadastro/alteracao de vacina
			request.getRequestDispatcher("cadastro_calendario_vacinacao.jsp").forward(request, response);
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private void excluirCalendarioVacinacao(HttpServletRequest request) {
		//extrai o parametro do request  e utiliza o DAO para remover o registro da base de dados
		new VacinaDAO().delete(Integer.parseInt(request.getParameter("codigo")));
	}

	private void listarVacinasEmAtraso(HttpServletRequest request,
			HttpServletResponse response) {
		//lista todos os registro de vacinas da base de dados
		List<Vacina> vacinas = new VacinaDAO().listAll();
		
		//seta alista de vacinas no request
		request.setAttribute("listagem_vacinas", vacinas);

		try {
			//direciona para a pagina de listagem de vacinas
			request.getRequestDispatcher("listagem_vacinas.jsp").forward(
					request, response);
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}

